package com.example.sp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * SharedPreferences是Android平台上一个轻量级的存储类，用来保存应用的一些常用配置，比如Activity状态等。
 * SharedPreferences本质上是一个xml文件，通过类似键值对的方式存放信息，它位于程序的私有目录中，即data/data/[packageName]/shared_prefs。
 * SharedPreferences提供了常规的数据类型保存接口，比如：int、long、boolean、String、Float、Set和Map这些数据类型。
 *
 * SharedPreferences的使用方法如下：
 *
 * 获取SharedPreferences对象：可以通过三种方式获取SharedPreferences对象。
 *
 * PreferenceManager.getDefaultSharedPreferences(this)：会创建名为“包名+_preferences”的XML文件，整个工程都可以用。
 * 调用Context对象的getSharedPreferences()方法：该方法有两个参数：文件名和访问权限，它创建的是用户自定义名字的XML文件，整个工程都可以用。
 * 调用Activity对象的getPreferences()方法：只有创建它的Activity可以用。
 * SharedPreferences的四种操作模式：Context.MODE_PRIVATE、Context.MODE_APPEND、Context.MODE_WORLD_READABLE、Context.MODE_WORLD_WRITEABLE。
 *
 * Context.MODE_PRIVATE：为默认操作模式，代表该文件是私有数据，只能被应用本身访问，在该模式下，写入的内容会覆盖原文件的内容。
 * Context.MODE_APPEND：模式会检查文件是否存在，如果文件存在，就往文件末尾进行追加，否则创建新文件。
 * Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE：这两个模式都存在安全漏洞，不推荐使用。
 */
public class MainActivity extends AppCompatActivity {


    SharedPreferences preferences;
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//        SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

        preferences = getPreferences(MODE_PRIVATE | MODE_APPEND);


        textView = findViewById(R.id.textview1);

        Button button = findViewById(R.id.btn1);
        Button button2 = findViewById(R.id.btn2);



        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor edit = preferences.edit();
                edit.putInt("age",34);
                edit.putString("name","yejing");
                edit.putLong("money",3439483884L);
                edit.putFloat("height",23.5F);
                Set<String> set = new HashSet<>();
                set.add("guangzhou");
                set.add("shanghai");
                set.add("shenzhen");
                edit.putStringSet("addr",set);

                edit.commit(); // 将数据


            }
        });

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                StringBuilder sb = new StringBuilder();
                Map<String, ?> all = preferences.getAll();
                for (Map.Entry<String, ?> stringEntry : all.entrySet()) {
                    String key = stringEntry.getKey();
                    Object value = stringEntry.getValue();


                    sb.append(key).append(",");

                }
                textView.setText(sb.toString());

            }
        });
    }
}